Add clock freezes to the profile
authorMatthias Clasen <mclasen@redhat.com>
Thu, 16 May 2019 20:50:31 +0000 (20:50 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 16 May 2019 20:50:31 +0000 (20:50 +0000)
gdk/gdkframeclockidle.c

index bb1e9c359c9b2ff04ddf08fb9c60ef10c0b65151..92f5449f93737142981821dd6dab0eca8641ac46 100644 (file)
@@ -42,6 +42,9 @@ struct _GdkFrameClockIdlePrivate
   gint64 frame_time;
   gint64 min_next_frame_time;
   gint64 sleep_serial;
+#ifdef G_ENABLE_DEBUG
+  gint64 freeze_time;
+#endif
 
   guint flush_idle_id;
   guint paint_idle_id;
@@ -558,6 +561,14 @@ gdk_frame_clock_idle_freeze (GdkFrameClock *clock)
   GdkFrameClockIdle *clock_idle = GDK_FRAME_CLOCK_IDLE (clock);
   GdkFrameClockIdlePrivate *priv = clock_idle->priv;
 
+#ifdef G_ENABLE_DEBUG
+  if (priv->freeze_count == 0)
+    {
+      if (gdk_profiler_is_running ())
+        priv->freeze_time = g_get_monotonic_time ();
+    }
+#endif
+
   priv->freeze_count++;
   maybe_stop_idle (clock_idle);
 }
@@ -582,6 +593,20 @@ gdk_frame_clock_idle_thaw (GdkFrameClock *clock)
         priv->phase = GDK_FRAME_CLOCK_PHASE_NONE;
 
       priv->sleep_serial = get_sleep_serial ();
+
+#ifdef G_ENABLE_DEBUG
+      if (gdk_profiler_is_running ())
+        {
+          if (priv->freeze_time != 0)
+            {
+              gint64 thaw_time = g_get_monotonic_time ();
+              gdk_profiler_add_mark (priv->freeze_time * 1000,
+                                     (thaw_time - priv->freeze_time) * 1000,
+                                     "freeze", "");
+              priv->freeze_time = 0;
+            }
+        }
+#endif
     }
 }